#!/bin/bash
# 预下载 OpenCV 到 CocoaPods 缓存目录，解决 pod install 卡住的问题
# 使用方法: ./download_opencv.sh

set -e

# OpenCV 下载地址（GitHub 官方源）
OPENCV_URL="https://github.com/opencv/opencv/releases/download/4.1.0/opencv-4.1.0-ios-framework.zip"
# 备用镜像源（如果 GitHub 无法访问）
MIRROR_URL="https://ghproxy.com/https://github.com/opencv/opencv/releases/download/4.1.0/opencv-4.1.0-ios-framework.zip"

CACHE_DIR="$HOME/Library/Caches/CocoaPods/Pods/Release"
ZIP_FILE="$CACHE_DIR/opencv-4.1.0-ios-framework.zip"

echo "📦 开始预下载 OpenCV 4.1.0..."
echo "💾 缓存目录: $CACHE_DIR"
echo ""

# 自动检测常见的本地代理端口
if [ -z "$http_proxy" ] && [ -z "$HTTP_PROXY" ]; then
    # 检查常见的代理端口是否在运行
    if lsof -i :1087 > /dev/null 2>&1 || lsof -i :7890 > /dev/null 2>&1 || lsof -i :1080 > /dev/null 2>&1; then
        echo "💡 检测到本地可能运行着代理，但未设置环境变量"
        echo "💡 如果代理地址是 127.0.0.1:1087，可以运行："
        echo "   export http_proxy=http://127.0.0.1:1087"
        echo "   export https_proxy=http://127.0.0.1:1087"
        echo ""
        echo "   或者如果代理是 127.0.0.1:7890，可以运行："
        echo "   export http_proxy=http://127.0.0.1:7890"
        echo "   export https_proxy=http://127.0.0.1:7890"
        echo ""
        read -p "是否现在设置代理为 127.0.0.1:1087? (y/n) " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            export http_proxy=http://127.0.0.1:1087
            export https_proxy=http://127.0.0.1:1087
            echo "✅ 已设置代理: $http_proxy"
            echo ""
        fi
    fi
fi

# 创建缓存目录
mkdir -p "$CACHE_DIR"

# 检查是否已存在
if [ -f "$ZIP_FILE" ]; then
    FILE_SIZE=$(stat -f%z "$ZIP_FILE" 2>/dev/null || stat -c%s "$ZIP_FILE" 2>/dev/null || echo "0")
    if [ "$FILE_SIZE" -gt 100000000 ]; then  # 大于 100MB 认为下载完整
        echo "✅ OpenCV zip 文件已存在于缓存中（大小: $(du -h "$ZIP_FILE" | cut -f1)）"
        echo "💡 可以直接运行 'pod install'"
        exit 0
    else
        echo "⚠️  发现不完整的文件，将重新下载..."
        rm -f "$ZIP_FILE"
    fi
fi

# 下载函数
download_with_curl() {
    local url=$1
    local output=$2
    local retries=3
    local timeout=120
    
    echo "📥 尝试下载: $url"
    echo "⏱️  超时设置: ${timeout}秒"
    echo ""
    
    # 检查是否有代理设置
    if [ -n "$http_proxy" ] || [ -n "$HTTP_PROXY" ]; then
        echo "🌐 检测到代理设置，将使用代理下载"
    fi
    
    for i in $(seq 1 $retries); do
        echo "🔄 尝试 $i/$retries..."
        
        # 使用 curl 下载，增加超时时间和重试
        if curl -L -C - -o "$output" "$url" \
            --progress-bar \
            --fail \
            --connect-timeout 30 \
            --max-time $timeout \
            --retry 2 \
            --retry-delay 3; then
            echo ""
            echo "✅ OpenCV 下载完成！"
            echo "📦 文件大小: $(du -h "$output" | cut -f1)"
            return 0
        else
            echo ""
            echo "⚠️  下载失败 (尝试 $i/$retries)"
            if [ $i -lt $retries ]; then
                echo "⏳ 等待 3 秒后重试..."
                sleep 3
            fi
        fi
    done
    
    return 1
}

# 尝试下载
echo "⬇️  正在下载 OpenCV framework（约 200MB，可能需要几分钟）..."
echo ""

# 首先尝试从 GitHub 下载
if download_with_curl "$OPENCV_URL" "$ZIP_FILE"; then
    echo ""
    echo "🎉 OpenCV 预下载完成！"
    echo "💡 现在可以运行 'cd ios && pod install'"
    exit 0
fi

# 如果 GitHub 失败，尝试使用镜像源
echo ""
echo "⚠️  GitHub 下载失败，尝试使用镜像源..."
if download_with_curl "$MIRROR_URL" "$ZIP_FILE"; then
    echo ""
    echo "🎉 OpenCV 预下载完成（使用镜像源）！"
    echo "💡 现在可以运行 'cd ios && pod install'"
    exit 0
fi

# 如果都失败了，提供手动下载指南
echo ""
echo "❌ 自动下载失败"
echo ""
echo "📋 由于网络限制，请手动下载 OpenCV："
echo ""
echo "1. 在浏览器中打开以下地址："
echo "   $OPENCV_URL"
echo ""
echo "2. 下载完成后，将文件移动到以下位置："
echo "   $ZIP_FILE"
echo ""
echo "   或者运行以下命令（将 ~/Downloads/opencv-4.1.0-ios-framework.zip 替换为实际下载路径）："
echo "   mv ~/Downloads/opencv-4.1.0-ios-framework.zip '$ZIP_FILE'"
echo ""
echo "3. 然后再次运行此脚本验证，或直接运行: cd ios && pod install"
echo ""
echo "💡 提示：如果浏览器可以下载但脚本不行，可能是："
echo "   - 终端没有使用系统代理设置"
echo "   - 可以尝试设置代理: export http_proxy=your_proxy"
echo "   - 或者使用 VPN 后再运行脚本"

# 检查下载目录是否有文件
DOWNLOADS_DIR="$HOME/Downloads"
if [ -f "$DOWNLOADS_DIR/opencv-4.1.0-ios-framework.zip" ]; then
    echo ""
    echo "🔍 检测到下载目录中有 OpenCV 文件，是否自动移动？(y/n)"
    read -r response
    if [[ "$response" =~ ^[Yy]$ ]]; then
        mv "$DOWNLOADS_DIR/opencv-4.1.0-ios-framework.zip" "$ZIP_FILE"
        if [ $? -eq 0 ]; then
            echo "✅ 文件已移动到缓存目录！"
            echo "💡 现在可以运行: cd ios && pod install"
            exit 0
        else
            echo "❌ 移动文件失败"
        fi
    fi
fi

exit 1

